/**
 * 验证规则
 * @Author:linwt
 * @Time:2021/10/18
 */
/**
 * 验证规则接口
 */
export interface IRulesMap {
  [propName: string]: any
  notNull: (value: string, msg: string) => string
  isEmail: (value: string, msg: string) => string  // 匹配Email地址
  isNumber: (value: number, msg: string) => string // 判断数值类型，包括整数和浮点数
  isDigits: (value: number, msg: string) => string // 只能输入0~9数字
  isMobile: (value: string, msg: string) => string // 匹配手机号码
  isQq: (value: string, msg: string) => string // 匹配QQ
  isZipCode: (value: string, msg: string) => string // 匹配邮政编码 (中国邮政编码为6位数字)
  isEnglish: (value: string, msg: string) => string // 匹配英文字母，不分大小写
  isUrl: (value: string, msg: string) => string // 匹配URL
  isPwd: (value: string, msg: string) => string // 匹配密码 必须字母开头，大小写字母，数字，特殊符合（_.@#$%^&*），长度8~18
  isIdCardNo: (value: string, msg: string) => string // 匹配身份证号码
  isChinese: (value: string, msg: string) => string // 匹配汉字
  isChineseChar: (value: string, msg: string) => string // 匹配中文(包括汉字和字符)
  isStringCheck: (value: string, msg: string) => string // 字符验证，只能包含中文、英文、数字、下划线等字符
}

export const rulesMap: IRulesMap = {
  notNull (value: string, msg: string): string {
    if (!value.trim()) {
      return msg
    }
    return ''
  },
  isEmail (value: string, msg: string): string {
    if (!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value)) {
      return msg
    }
    return ''
  },
  isNumber (value: number, msg: string): string {
    return ''
  },
  isDigits (value: number, msg: string): string {
    if (!value.toString().match(/^\d+$/)) {
      return msg
    }
    return ''
  },
  isMobile (value: string, msg: string): string {
    if (!/^((\(\d{2,3}\))|(\d{3}\-))?((13\d{9})|(15\d{9})|(18\d{9}))$/.test(value)) {
      return msg
    }
    return ''
  },
  isQq (value: string, msg: string): string {
    if (!value.match(/^[1-9]\d{4,12}$/)) {
      return msg
    }
    return ''
  },
  isZipCode (value: string, msg: string): string {
    if (!value.match(/^[0-9]{6}$/)) {
      return msg
    }
    return ''
  },
  isEnglish (value: string, msg: string): string {
    if (!value.match(/^[A-Za-z]+$/)) {
      return msg
    }
    return ''
  },
  isUrl (value: string, msg: string): string {
    if (!value.match(/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\’:+!]*([^<>\"])*$/)) {
      return msg
    }
    return ''
  },
  isPwd (value: string, msg: string): string {
    // 第一位必须是字母，(?![0-9]+$)预测该位置后面不全是数字，
    // (?![a-zA-Z]+$) 预测该位置后面不全是字母
    // [a-zA-Z0-9_.@#$%^&*] 字母数字和指定的特殊符号
    if (!value.match(/^[a-zA-Z](?![0-9]+$)(?![a-zA-Z]+$)[a-zA-Z0-9_.@#$%^&*]{5,15}$/)) {
      return msg
    }
    return ''
  },
  isIdCardNo (value: string, msg: string): string {
    if (!value.match(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/)) {
      return msg
    }
    return ''
  },
  isChinese (value: string, msg: string): string {
    if (!value.match(/^[\u4e00-\u9fa5]+$/)) {
      return msg
    }
    return ''
  },
  isChineseChar (value: string, msg: string): string {
    if (!value.match(/^[\u0391-\uFFE5]+$/)) {
      return msg
    }
    return ''
  },
  isStringCheck (value: string, msg: string): string {
    if (!value.match(/^[a-zA-Z0-9\u4e00-\u9fa5-_]+$/)) {
      return msg
    }
    return ''
  }
}

